<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DM-CtrlH7-BF-DevProgram: C:/Users/ASUS/Desktop/dm-ctrlH7-balance-9025test/modules/algorithm/kalman_filter.c</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectlogo"><img alt="Logo" src="50x5.png"/></td>
  <td id="projectalign">
   <div id="projectname">DM-CtrlH7-BF-DevProgram<span id="projectnumber">&#160;beta 0.1</span>
   </div>
   <div id="projectbrief">C.ONE Studio Damiao Development Board Framework</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search',true);
  $(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(function(){initNavTree('_c_1_2_users_2_a_s_u_s_2_desktop_2dm-ctrl_h7-balance-9025test_2modules_2algorithm_2kalman_filter_8c-example.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>

<div class="header">
  <div class="headertitle"><div class="title">C:/Users/ASUS/Desktop/dm-ctrlH7-balance-9025test/modules/algorithm/kalman_filter.c</div></div>
</div><!--header-->
<div class="contents">
<p>x = | height | | velocity | |acceleration|</p>
<p>KalmanFilter_t Height_KF;</p>
<p>void INS_Task_Init(void) { static float P_Init[9] = { 10, 0, 0, 0, 30, 0, 0, 0, 10, }; static float F_Init[9] = { 1, dt, 0.5*dt*dt, 0, 1, dt, 0, 0, 1, }; static float Q_Init[9] = { 0.25*dt*dt*dt*dt, 0.5*dt*dt*dt, 0.5*dt*dt, 0.5*dt*dt*dt, dt*dt, dt, 0.5*dt*dt, dt, 1, };</p>
<p>// 设置最小方差 static float state_min_variance[3] = {0.03, 0.005, 0.1};</p>
<p>// 开启自动调整 Height_KF.UseAutoAdjustment = 1;</p>
<p>// 气压测得高度 GPS测得高度 加速度计测得z轴运动加速度 static uint8_t measurement_reference[3] = {1, 1, 3}</p>
<p>static float measurement_degree[3] = {1, 1, 1} // 根据measurement_reference与measurement_degree生成H矩阵如下（在当前周期全部测量数据有效情况下） |1 0 0| |1 0 0| |0 0 1|</p>
<p>static float mat_R_diagonal_elements = {30, 25, 35} //根据mat_R_diagonal_elements生成R矩阵如下（在当前周期全部测量数据有效情况下） |30 0 0| | 0 25 0| | 0 0 35|</p>
<p>Kalman_Filter_Init(&amp;Height_KF, 3, 0, 3);</p>
<p>// 设置矩阵值 memcpy(Height_KF.P_data, P_Init, sizeof(P_Init)); memcpy(Height_KF.F_data, F_Init, sizeof(F_Init)); memcpy(Height_KF.Q_data, Q_Init, sizeof(Q_Init)); memcpy(Height_KF.MeasurementMap, measurement_reference, sizeof(measurement_reference)); memcpy(Height_KF.MeasurementDegree, measurement_degree, sizeof(measurement_degree)); memcpy(Height_KF.MatR_DiagonalElements, mat_R_diagonal_elements, sizeof(mat_R_diagonal_elements)); memcpy(Height_KF.StateMinVariance, state_min_variance, sizeof(state_min_variance)); }</p>
<p>void INS_Task(void const *pvParameters) { // 循环更新 Kalman_Filter_Update(&amp;Height_KF); vTaskDelay(ts); }</p>
<p>// 测量数据更新应按照以下形式 即向MeasuredVector赋值 void Barometer_Read_Over(void) { ...... INS_KF.MeasuredVector[0] = baro_height; } void GPS_Read_Over(void) { ...... INS_KF.MeasuredVector[1] = GPS_height; } void Acc_Data_Process(void) { ...... INS_KF.MeasuredVector[2] = acc.z; }</p>
<div class="fragment"><div class="line"></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &quot;kalman_filter.h&quot;</span></div>
<div class="line"> </div>
<div class="line">uint16_t sizeof_float, sizeof_double;</div>
<div class="line"> </div>
<div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> H_K_R_Adjustment(KalmanFilter_t *kf);</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">void</span> Kalman_Filter_Init(KalmanFilter_t *kf, uint8_t xhatSize, uint8_t uSize, uint8_t zSize)</div>
<div class="line">{</div>
<div class="line">    sizeof_float = <span class="keyword">sizeof</span>(float);</div>
<div class="line">    sizeof_double = <span class="keyword">sizeof</span>(double);</div>
<div class="line"> </div>
<div class="line">    kf-&gt;<a id="a0" name="a0"></a>xhatSize = xhatSize;</div>
<div class="line">    kf-&gt;<a id="a1" name="a1"></a>uSize = uSize;</div>
<div class="line">    kf-&gt;<a id="a2" name="a2"></a>zSize = zSize;</div>
<div class="line"> </div>
<div class="line">    kf-&gt;<a id="a3" name="a3"></a>MeasurementValidNum = 0;</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// measurement flags</span></div>
<div class="line">    kf-&gt;<a id="a4" name="a4"></a>MeasurementMap = (uint8_t *)user_malloc(<span class="keyword">sizeof</span>(uint8_t) * zSize);</div>
<div class="line">    memset(kf-&gt;MeasurementMap, 0, <span class="keyword">sizeof</span>(uint8_t) * zSize);</div>
<div class="line">    kf-&gt;<a id="a5" name="a5"></a>MeasurementDegree = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * zSize);</div>
<div class="line">    memset(kf-&gt;MeasurementDegree, 0, sizeof_float * zSize);</div>
<div class="line">    kf-&gt;<a id="a6" name="a6"></a>MatR_DiagonalElements = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * zSize);</div>
<div class="line">    memset(kf-&gt;MatR_DiagonalElements, 0, sizeof_float * zSize);</div>
<div class="line">    kf-&gt;<a id="a7" name="a7"></a>StateMinVariance = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * xhatSize);</div>
<div class="line">    memset(kf-&gt;StateMinVariance, 0, sizeof_float * xhatSize);</div>
<div class="line">    kf-&gt;<a id="a8" name="a8"></a>temp = (uint8_t *)user_malloc(<span class="keyword">sizeof</span>(uint8_t) * zSize);</div>
<div class="line">    memset(kf-&gt;temp, 0, <span class="keyword">sizeof</span>(uint8_t) * zSize);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// filter data</span></div>
<div class="line">    kf-&gt;<a id="a9" name="a9"></a>FilteredValue = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * xhatSize);</div>
<div class="line">    memset(kf-&gt;FilteredValue, 0, sizeof_float * xhatSize);</div>
<div class="line">    kf-&gt;<a id="a10" name="a10"></a>MeasuredVector = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * zSize);</div>
<div class="line">    memset(kf-&gt;MeasuredVector, 0, sizeof_float * zSize);</div>
<div class="line">    kf-&gt;<a id="a11" name="a11"></a>ControlVector = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * uSize);</div>
<div class="line">    memset(kf-&gt;ControlVector, 0, sizeof_float * uSize);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// xhat x(k|k)</span></div>
<div class="line">    kf-&gt;<a id="a12" name="a12"></a>xhat_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * xhatSize);</div>
<div class="line">    memset(kf-&gt;xhat_data, 0, sizeof_float * xhatSize);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a13" name="a13"></a>xhat, kf-&gt;xhatSize, 1, (<span class="keywordtype">float</span> *)kf-&gt;xhat_data);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// xhatminus x(k|k-1)</span></div>
<div class="line">    kf-&gt;<a id="a14" name="a14"></a>xhatminus_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * xhatSize);</div>
<div class="line">    memset(kf-&gt;xhatminus_data, 0, sizeof_float * xhatSize);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a15" name="a15"></a>xhatminus, kf-&gt;xhatSize, 1, (<span class="keywordtype">float</span> *)kf-&gt;xhatminus_data);</div>
<div class="line"> </div>
<div class="line">    <span class="keywordflow">if</span> (uSize != 0)</div>
<div class="line">    {</div>
<div class="line">        <span class="comment">// control vector u</span></div>
<div class="line">        kf-&gt;<a id="a16" name="a16"></a>u_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * uSize);</div>
<div class="line">        memset(kf-&gt;u_data, 0, sizeof_float * uSize);</div>
<div class="line">        Matrix_Init(&amp;kf-&gt;<a id="a17" name="a17"></a>u, kf-&gt;uSize, 1, (<span class="keywordtype">float</span> *)kf-&gt;u_data);</div>
<div class="line">    }</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// measurement vector z</span></div>
<div class="line">    kf-&gt;<a id="a18" name="a18"></a>z_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * zSize);</div>
<div class="line">    memset(kf-&gt;z_data, 0, sizeof_float * zSize);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a19" name="a19"></a>z, kf-&gt;zSize, 1, (<span class="keywordtype">float</span> *)kf-&gt;z_data);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// covariance matrix P(k|k)</span></div>
<div class="line">    kf-&gt;<a id="a20" name="a20"></a>P_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * xhatSize * xhatSize);</div>
<div class="line">    memset(kf-&gt;P_data, 0, sizeof_float * xhatSize * xhatSize);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a21" name="a21"></a>P, kf-&gt;xhatSize, kf-&gt;xhatSize, (<span class="keywordtype">float</span> *)kf-&gt;P_data);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// create covariance matrix P(k|k-1)</span></div>
<div class="line">    kf-&gt;<a id="a22" name="a22"></a>Pminus_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * xhatSize * xhatSize);</div>
<div class="line">    memset(kf-&gt;Pminus_data, 0, sizeof_float * xhatSize * xhatSize);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a23" name="a23"></a>Pminus, kf-&gt;xhatSize, kf-&gt;xhatSize, (<span class="keywordtype">float</span> *)kf-&gt;Pminus_data);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// state transition matrix F FT</span></div>
<div class="line">    kf-&gt;<a id="a24" name="a24"></a>F_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * xhatSize * xhatSize);</div>
<div class="line">    kf-&gt;<a id="a25" name="a25"></a>FT_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * xhatSize * xhatSize);</div>
<div class="line">    memset(kf-&gt;F_data, 0, sizeof_float * xhatSize * xhatSize);</div>
<div class="line">    memset(kf-&gt;FT_data, 0, sizeof_float * xhatSize * xhatSize);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a26" name="a26"></a>F, kf-&gt;xhatSize, kf-&gt;xhatSize, (<span class="keywordtype">float</span> *)kf-&gt;F_data);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a27" name="a27"></a>FT, kf-&gt;xhatSize, kf-&gt;xhatSize, (<span class="keywordtype">float</span> *)kf-&gt;FT_data);</div>
<div class="line"> </div>
<div class="line">    <span class="keywordflow">if</span> (uSize != 0)</div>
<div class="line">    {</div>
<div class="line">        <span class="comment">// control matrix B</span></div>
<div class="line">        kf-&gt;<a id="a28" name="a28"></a>B_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * xhatSize * uSize);</div>
<div class="line">        memset(kf-&gt;B_data, 0, sizeof_float * xhatSize * uSize);</div>
<div class="line">        Matrix_Init(&amp;kf-&gt;<a id="a29" name="a29"></a>B, kf-&gt;xhatSize, kf-&gt;uSize, (<span class="keywordtype">float</span> *)kf-&gt;B_data);</div>
<div class="line">    }</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// measurement matrix H</span></div>
<div class="line">    kf-&gt;<a id="a30" name="a30"></a>H_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * zSize * xhatSize);</div>
<div class="line">    kf-&gt;<a id="a31" name="a31"></a>HT_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * xhatSize * zSize);</div>
<div class="line">    memset(kf-&gt;H_data, 0, sizeof_float * zSize * xhatSize);</div>
<div class="line">    memset(kf-&gt;HT_data, 0, sizeof_float * xhatSize * zSize);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a32" name="a32"></a>H, kf-&gt;zSize, kf-&gt;xhatSize, (<span class="keywordtype">float</span> *)kf-&gt;H_data);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a33" name="a33"></a>HT, kf-&gt;xhatSize, kf-&gt;zSize, (<span class="keywordtype">float</span> *)kf-&gt;HT_data);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// process noise covariance matrix Q</span></div>
<div class="line">    kf-&gt;<a id="a34" name="a34"></a>Q_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * xhatSize * xhatSize);</div>
<div class="line">    memset(kf-&gt;Q_data, 0, sizeof_float * xhatSize * xhatSize);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a35" name="a35"></a>Q, kf-&gt;xhatSize, kf-&gt;xhatSize, (<span class="keywordtype">float</span> *)kf-&gt;Q_data);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// measurement noise covariance matrix R</span></div>
<div class="line">    kf-&gt;<a id="a36" name="a36"></a>R_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * zSize * zSize);</div>
<div class="line">    memset(kf-&gt;R_data, 0, sizeof_float * zSize * zSize);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a37" name="a37"></a>R, kf-&gt;zSize, kf-&gt;zSize, (<span class="keywordtype">float</span> *)kf-&gt;R_data);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// kalman gain K</span></div>
<div class="line">    kf-&gt;<a id="a38" name="a38"></a>K_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * xhatSize * zSize);</div>
<div class="line">    memset(kf-&gt;K_data, 0, sizeof_float * xhatSize * zSize);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a39" name="a39"></a>K, kf-&gt;xhatSize, kf-&gt;zSize, (<span class="keywordtype">float</span> *)kf-&gt;K_data);</div>
<div class="line"> </div>
<div class="line">    kf-&gt;<a id="a40" name="a40"></a>S_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * kf-&gt;xhatSize * kf-&gt;xhatSize);</div>
<div class="line">    kf-&gt;<a id="a41" name="a41"></a>temp_matrix_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * kf-&gt;xhatSize * kf-&gt;xhatSize);</div>
<div class="line">    kf-&gt;<a id="a42" name="a42"></a>temp_matrix_data1 = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * kf-&gt;xhatSize * kf-&gt;xhatSize);</div>
<div class="line">    kf-&gt;<a id="a43" name="a43"></a>temp_vector_data = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * kf-&gt;xhatSize);</div>
<div class="line">    kf-&gt;<a id="a44" name="a44"></a>temp_vector_data1 = (<span class="keywordtype">float</span> *)user_malloc(sizeof_float * kf-&gt;xhatSize);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a45" name="a45"></a>S, kf-&gt;xhatSize, kf-&gt;xhatSize, (<span class="keywordtype">float</span> *)kf-&gt;S_data);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a46" name="a46"></a>temp_matrix, kf-&gt;xhatSize, kf-&gt;xhatSize, (<span class="keywordtype">float</span> *)kf-&gt;temp_matrix_data);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a47" name="a47"></a>temp_matrix1, kf-&gt;xhatSize, kf-&gt;xhatSize, (<span class="keywordtype">float</span> *)kf-&gt;temp_matrix_data1);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a48" name="a48"></a>temp_vector, kf-&gt;xhatSize, 1, (<span class="keywordtype">float</span> *)kf-&gt;temp_vector_data);</div>
<div class="line">    Matrix_Init(&amp;kf-&gt;<a id="a49" name="a49"></a>temp_vector1, kf-&gt;xhatSize, 1, (<span class="keywordtype">float</span> *)kf-&gt;temp_vector_data1);</div>
<div class="line"> </div>
<div class="line">    kf-&gt;<a id="a50" name="a50"></a>SkipEq1 = 0;</div>
<div class="line">    kf-&gt;<a id="a51" name="a51"></a>SkipEq2 = 0;</div>
<div class="line">    kf-&gt;<a id="a52" name="a52"></a>SkipEq3 = 0;</div>
<div class="line">    kf-&gt;<a id="a53" name="a53"></a>SkipEq4 = 0;</div>
<div class="line">    kf-&gt;<a id="a54" name="a54"></a>SkipEq5 = 0;</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">void</span> Kalman_Filter_Measure(KalmanFilter_t *kf)</div>
<div class="line">{</div>
<div class="line">    <span class="comment">// 矩阵H K R根据量测情况自动调整</span></div>
<div class="line">    <span class="comment">// matrix H K R auto adjustment</span></div>
<div class="line">    <span class="keywordflow">if</span> (kf-&gt;<a id="a55" name="a55"></a>UseAutoAdjustment != 0)</div>
<div class="line">        H_K_R_Adjustment(kf);</div>
<div class="line">    <span class="keywordflow">else</span></div>
<div class="line">    {</div>
<div class="line">        memcpy(kf-&gt;z_data, kf-&gt;MeasuredVector, sizeof_float * kf-&gt;zSize);</div>
<div class="line">        memset(kf-&gt;MeasuredVector, 0, sizeof_float * kf-&gt;zSize);</div>
<div class="line">    }</div>
<div class="line"> </div>
<div class="line">    memcpy(kf-&gt;u_data, kf-&gt;ControlVector, sizeof_float * kf-&gt;uSize);</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">void</span> Kalman_Filter_xhatMinusUpdate(KalmanFilter_t *kf)</div>
<div class="line">{</div>
<div class="line">    <span class="keywordflow">if</span> (!kf-&gt;SkipEq1)</div>
<div class="line">    {</div>
<div class="line">        <span class="keywordflow">if</span> (kf-&gt;uSize &gt; 0)</div>
<div class="line">        {</div>
<div class="line">            kf-&gt;temp_vector.<a id="a56" name="a56"></a><a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;xhatSize;</div>
<div class="line">            kf-&gt;temp_vector.<a id="a57" name="a57"></a><a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = 1;</div>
<div class="line">            kf-&gt;<a id="a58" name="a58"></a>MatStatus = Matrix_Multiply(&amp;kf-&gt;F, &amp;kf-&gt;xhat, &amp;kf-&gt;temp_vector);</div>
<div class="line">            kf-&gt;temp_vector1.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;xhatSize;</div>
<div class="line">            kf-&gt;temp_vector1.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = 1;</div>
<div class="line">            kf-&gt;MatStatus = Matrix_Multiply(&amp;kf-&gt;B, &amp;kf-&gt;u, &amp;kf-&gt;temp_vector1);</div>
<div class="line">            kf-&gt;MatStatus = Matrix_Add(&amp;kf-&gt;temp_vector, &amp;kf-&gt;temp_vector1, &amp;kf-&gt;xhatminus);</div>
<div class="line">        }</div>
<div class="line">        <span class="keywordflow">else</span></div>
<div class="line">        {</div>
<div class="line">            kf-&gt;MatStatus = Matrix_Multiply(&amp;kf-&gt;F, &amp;kf-&gt;xhat, &amp;kf-&gt;xhatminus);</div>
<div class="line">        }</div>
<div class="line">    }</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">void</span> Kalman_Filter_PminusUpdate(KalmanFilter_t *kf)</div>
<div class="line">{</div>
<div class="line">    <span class="keywordflow">if</span> (!kf-&gt;SkipEq2)</div>
<div class="line">    {</div>
<div class="line">        kf-&gt;MatStatus = Matrix_Transpose(&amp;kf-&gt;F, &amp;kf-&gt;FT);</div>
<div class="line">        kf-&gt;MatStatus = Matrix_Multiply(&amp;kf-&gt;F, &amp;kf-&gt;P, &amp;kf-&gt;Pminus);</div>
<div class="line">        kf-&gt;temp_matrix.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;Pminus.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a>;</div>
<div class="line">        kf-&gt;temp_matrix.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = kf-&gt;FT.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a>;</div>
<div class="line">        kf-&gt;MatStatus = Matrix_Multiply(&amp;kf-&gt;Pminus, &amp;kf-&gt;FT, &amp;kf-&gt;temp_matrix); <span class="comment">// temp_matrix = F P(k-1) FT</span></div>
<div class="line">        kf-&gt;MatStatus = Matrix_Add(&amp;kf-&gt;temp_matrix, &amp;kf-&gt;Q, &amp;kf-&gt;Pminus);</div>
<div class="line">    }</div>
<div class="line">}</div>
<div class="line"><span class="keywordtype">void</span> Kalman_Filter_SetK(KalmanFilter_t *kf)</div>
<div class="line">{</div>
<div class="line">    <span class="keywordflow">if</span> (!kf-&gt;SkipEq3)</div>
<div class="line">    {</div>
<div class="line">        kf-&gt;MatStatus = Matrix_Transpose(&amp;kf-&gt;H, &amp;kf-&gt;HT); <span class="comment">// z|x =&gt; x|z</span></div>
<div class="line">        kf-&gt;temp_matrix.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;H.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a>;</div>
<div class="line">        kf-&gt;temp_matrix.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = kf-&gt;Pminus.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a>;</div>
<div class="line">        kf-&gt;MatStatus = Matrix_Multiply(&amp;kf-&gt;H, &amp;kf-&gt;Pminus, &amp;kf-&gt;temp_matrix); <span class="comment">// temp_matrix = H·P&#39;(k)</span></div>
<div class="line">        kf-&gt;temp_matrix1.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;temp_matrix.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a>;</div>
<div class="line">        kf-&gt;temp_matrix1.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = kf-&gt;HT.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a>;</div>
<div class="line">        kf-&gt;MatStatus = Matrix_Multiply(&amp;kf-&gt;temp_matrix, &amp;kf-&gt;HT, &amp;kf-&gt;temp_matrix1); <span class="comment">// temp_matrix1 = H·P&#39;(k)·HT</span></div>
<div class="line">        kf-&gt;S.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;R.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a>;</div>
<div class="line">        kf-&gt;S.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = kf-&gt;R.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a>;</div>
<div class="line">        kf-&gt;MatStatus = Matrix_Add(&amp;kf-&gt;temp_matrix1, &amp;kf-&gt;R, &amp;kf-&gt;S); <span class="comment">// S = H P&#39;(k) HT + R</span></div>
<div class="line">        kf-&gt;MatStatus = Matrix_Inverse(&amp;kf-&gt;S, &amp;kf-&gt;temp_matrix1);     <span class="comment">// temp_matrix1 = inv(H·P&#39;(k)·HT + R)</span></div>
<div class="line">        kf-&gt;temp_matrix.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;Pminus.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a>;</div>
<div class="line">        kf-&gt;temp_matrix.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = kf-&gt;HT.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a>;</div>
<div class="line">        kf-&gt;MatStatus = Matrix_Multiply(&amp;kf-&gt;Pminus, &amp;kf-&gt;HT, &amp;kf-&gt;temp_matrix); <span class="comment">// temp_matrix = P&#39;(k)·HT</span></div>
<div class="line">        kf-&gt;MatStatus = Matrix_Multiply(&amp;kf-&gt;temp_matrix, &amp;kf-&gt;temp_matrix1, &amp;kf-&gt;K);</div>
<div class="line">    }</div>
<div class="line">}</div>
<div class="line"><span class="keywordtype">void</span> Kalman_Filter_xhatUpdate(KalmanFilter_t *kf)</div>
<div class="line">{</div>
<div class="line">    <span class="keywordflow">if</span> (!kf-&gt;SkipEq4)</div>
<div class="line">    {</div>
<div class="line">        kf-&gt;temp_vector.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;H.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a>;</div>
<div class="line">        kf-&gt;temp_vector.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = 1;</div>
<div class="line">        kf-&gt;MatStatus = Matrix_Multiply(&amp;kf-&gt;H, &amp;kf-&gt;xhatminus, &amp;kf-&gt;temp_vector); <span class="comment">// temp_vector = H xhat&#39;(k)</span></div>
<div class="line">        kf-&gt;temp_vector1.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;z.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a>;</div>
<div class="line">        kf-&gt;temp_vector1.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = 1;</div>
<div class="line">        kf-&gt;MatStatus = Matrix_Subtract(&amp;kf-&gt;z, &amp;kf-&gt;temp_vector, &amp;kf-&gt;temp_vector1); <span class="comment">// temp_vector1 = z(k) - H·xhat&#39;(k)</span></div>
<div class="line">        kf-&gt;temp_vector.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;K.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a>;</div>
<div class="line">        kf-&gt;temp_vector.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = 1;</div>
<div class="line">        kf-&gt;MatStatus = Matrix_Multiply(&amp;kf-&gt;K, &amp;kf-&gt;temp_vector1, &amp;kf-&gt;temp_vector); <span class="comment">// temp_vector = K(k)·(z(k) - H·xhat&#39;(k))</span></div>
<div class="line">        kf-&gt;MatStatus = Matrix_Add(&amp;kf-&gt;xhatminus, &amp;kf-&gt;temp_vector, &amp;kf-&gt;xhat);</div>
<div class="line">    }</div>
<div class="line">}</div>
<div class="line"><span class="keywordtype">void</span> Kalman_Filter_P_Update(KalmanFilter_t *kf)</div>
<div class="line">{</div>
<div class="line">    <span class="keywordflow">if</span> (!kf-&gt;SkipEq5)</div>
<div class="line">    {</div>
<div class="line">        kf-&gt;temp_matrix.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;K.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a>;</div>
<div class="line">        kf-&gt;temp_matrix.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = kf-&gt;H.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a>;</div>
<div class="line">        kf-&gt;temp_matrix1.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;temp_matrix.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a>;</div>
<div class="line">        kf-&gt;temp_matrix1.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = kf-&gt;Pminus.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a>;</div>
<div class="line">        kf-&gt;MatStatus = Matrix_Multiply(&amp;kf-&gt;K, &amp;kf-&gt;H, &amp;kf-&gt;temp_matrix);                 <span class="comment">// temp_matrix = K(k)·H</span></div>
<div class="line">        kf-&gt;MatStatus = Matrix_Multiply(&amp;kf-&gt;temp_matrix, &amp;kf-&gt;Pminus, &amp;kf-&gt;temp_matrix1); <span class="comment">// temp_matrix1 = K(k)·H·P&#39;(k)</span></div>
<div class="line">        kf-&gt;MatStatus = Matrix_Subtract(&amp;kf-&gt;Pminus, &amp;kf-&gt;temp_matrix1, &amp;kf-&gt;P);</div>
<div class="line">    }</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">float</span> *Kalman_Filter_Update(KalmanFilter_t *kf)</div>
<div class="line">{</div>
<div class="line">    <span class="comment">// 0. 获取量测信息</span></div>
<div class="line">    Kalman_Filter_Measure(kf);</div>
<div class="line">    <span class="keywordflow">if</span> (kf-&gt;<a id="a59" name="a59"></a>User_Func0_f != NULL)</div>
<div class="line">        kf-&gt;User_Func0_f(kf);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// 先验估计</span></div>
<div class="line">    <span class="comment">// 1. xhat&#39;(k)= A·xhat(k-1) + B·u</span></div>
<div class="line">    Kalman_Filter_xhatMinusUpdate(kf);</div>
<div class="line">    <span class="keywordflow">if</span> (kf-&gt;<a id="a60" name="a60"></a>User_Func1_f != NULL)</div>
<div class="line">        kf-&gt;User_Func1_f(kf);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// 预测更新</span></div>
<div class="line">    <span class="comment">// 2. P&#39;(k) = A·P(k-1)·AT + Q</span></div>
<div class="line">    Kalman_Filter_PminusUpdate(kf);</div>
<div class="line">    <span class="keywordflow">if</span> (kf-&gt;<a id="a61" name="a61"></a>User_Func2_f != NULL)</div>
<div class="line">        kf-&gt;User_Func2_f(kf);</div>
<div class="line"> </div>
<div class="line">    <span class="keywordflow">if</span> (kf-&gt;MeasurementValidNum != 0 || kf-&gt;UseAutoAdjustment == 0)</div>
<div class="line">    {</div>
<div class="line">        <span class="comment">// 量测更新</span></div>
<div class="line">        <span class="comment">// 3. K(k) = P&#39;(k)·HT / (H·P&#39;(k)·HT + R)</span></div>
<div class="line">        Kalman_Filter_SetK(kf);</div>
<div class="line"> </div>
<div class="line">        <span class="keywordflow">if</span> (kf-&gt;<a id="a62" name="a62"></a>User_Func3_f != NULL)</div>
<div class="line">            kf-&gt;User_Func3_f(kf);</div>
<div class="line"> </div>
<div class="line">        <span class="comment">// 融合</span></div>
<div class="line">        <span class="comment">// 4. xhat(k) = xhat&#39;(k) + K(k)·(z(k) - H·xhat&#39;(k))</span></div>
<div class="line">        Kalman_Filter_xhatUpdate(kf);</div>
<div class="line"> </div>
<div class="line">        <span class="keywordflow">if</span> (kf-&gt;<a id="a63" name="a63"></a>User_Func4_f != NULL)</div>
<div class="line">            kf-&gt;User_Func4_f(kf);</div>
<div class="line"> </div>
<div class="line">        <span class="comment">// 修正方差</span></div>
<div class="line">        <span class="comment">// 5. P(k) = (1-K(k)·H)·P&#39;(k) ==&gt; P(k) = P&#39;(k)-K(k)·H·P&#39;(k)</span></div>
<div class="line">        Kalman_Filter_P_Update(kf);</div>
<div class="line">    }</div>
<div class="line">    <span class="keywordflow">else</span></div>
<div class="line">    {</div>
<div class="line">        <span class="comment">// 无有效量测,仅预测</span></div>
<div class="line">        <span class="comment">// xhat(k) = xhat&#39;(k)</span></div>
<div class="line">        <span class="comment">// P(k) = P&#39;(k)</span></div>
<div class="line">        memcpy(kf-&gt;xhat_data, kf-&gt;xhatminus_data, sizeof_float * kf-&gt;xhatSize);</div>
<div class="line">        memcpy(kf-&gt;P_data, kf-&gt;Pminus_data, sizeof_float * kf-&gt;xhatSize * kf-&gt;xhatSize);</div>
<div class="line">    }</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// 自定义函数,可以提供后处理等</span></div>
<div class="line">    <span class="keywordflow">if</span> (kf-&gt;<a id="a64" name="a64"></a>User_Func5_f != NULL)</div>
<div class="line">        kf-&gt;User_Func5_f(kf);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// 避免滤波器过度收敛</span></div>
<div class="line">    <span class="comment">// suppress filter excessive convergence</span></div>
<div class="line">    <span class="keywordflow">for</span> (uint8_t i = 0; i &lt; kf-&gt;xhatSize; ++i)</div>
<div class="line">    {</div>
<div class="line">        <span class="keywordflow">if</span> (kf-&gt;P_data[i * kf-&gt;xhatSize + i] &lt; kf-&gt;StateMinVariance[i])</div>
<div class="line">            kf-&gt;P_data[i * kf-&gt;xhatSize + i] = kf-&gt;StateMinVariance[i];</div>
<div class="line">    }</div>
<div class="line"> </div>
<div class="line">    memcpy(kf-&gt;FilteredValue, kf-&gt;xhat_data, sizeof_float * kf-&gt;xhatSize);</div>
<div class="line"> </div>
<div class="line">    <span class="keywordflow">if</span> (kf-&gt;<a id="a65" name="a65"></a>User_Func6_f != NULL)</div>
<div class="line">        kf-&gt;User_Func6_f(kf);</div>
<div class="line"> </div>
<div class="line">    <span class="keywordflow">return</span> kf-&gt;FilteredValue;</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> H_K_R_Adjustment(KalmanFilter_t *kf)</div>
<div class="line">{</div>
<div class="line">    kf-&gt;MeasurementValidNum = 0;</div>
<div class="line"> </div>
<div class="line">    memcpy(kf-&gt;z_data, kf-&gt;MeasuredVector, sizeof_float * kf-&gt;zSize);</div>
<div class="line">    memset(kf-&gt;MeasuredVector, 0, sizeof_float * kf-&gt;zSize);</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// 识别量测数据有效性并调整矩阵H R K</span></div>
<div class="line">    <span class="comment">// recognize measurement validity and adjust matrices H R K</span></div>
<div class="line">    memset(kf-&gt;R_data, 0, sizeof_float * kf-&gt;zSize * kf-&gt;zSize);</div>
<div class="line">    memset(kf-&gt;H_data, 0, sizeof_float * kf-&gt;xhatSize * kf-&gt;zSize);</div>
<div class="line">    <span class="keywordflow">for</span> (uint8_t i = 0; i &lt; kf-&gt;zSize; ++i)</div>
<div class="line">    {</div>
<div class="line">        <span class="keywordflow">if</span> (kf-&gt;z_data[i] != 0)</div>
<div class="line">        {</div>
<div class="line">            <span class="comment">// 重构向量z</span></div>
<div class="line">            <span class="comment">// rebuild vector z</span></div>
<div class="line">            kf-&gt;z_data[kf-&gt;MeasurementValidNum] = kf-&gt;z_data[i];</div>
<div class="line">            kf-&gt;temp[kf-&gt;MeasurementValidNum] = i;</div>
<div class="line">            <span class="comment">// 重构矩阵H</span></div>
<div class="line">            <span class="comment">// rebuild matrix H</span></div>
<div class="line">            kf-&gt;H_data[kf-&gt;xhatSize * kf-&gt;MeasurementValidNum + kf-&gt;MeasurementMap[i] - 1] = kf-&gt;MeasurementDegree[i];</div>
<div class="line">            kf-&gt;MeasurementValidNum++;</div>
<div class="line">        }</div>
<div class="line">    }</div>
<div class="line">    <span class="keywordflow">for</span> (uint8_t i = 0; i &lt; kf-&gt;MeasurementValidNum; ++i)</div>
<div class="line">    {</div>
<div class="line">        <span class="comment">// 重构矩阵R</span></div>
<div class="line">        <span class="comment">// rebuild matrix R</span></div>
<div class="line">        kf-&gt;R_data[i * kf-&gt;MeasurementValidNum + i] = kf-&gt;MatR_DiagonalElements[kf-&gt;temp[i]];</div>
<div class="line">    }</div>
<div class="line"> </div>
<div class="line">    <span class="comment">// 调整矩阵维数</span></div>
<div class="line">    <span class="comment">// adjust the dimensions of system matrices</span></div>
<div class="line">    kf-&gt;H.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;MeasurementValidNum;</div>
<div class="line">    kf-&gt;H.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = kf-&gt;xhatSize;</div>
<div class="line">    kf-&gt;HT.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;xhatSize;</div>
<div class="line">    kf-&gt;HT.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = kf-&gt;MeasurementValidNum;</div>
<div class="line">    kf-&gt;R.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;MeasurementValidNum;</div>
<div class="line">    kf-&gt;R.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = kf-&gt;MeasurementValidNum;</div>
<div class="line">    kf-&gt;K.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;xhatSize;</div>
<div class="line">    kf-&gt;K.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">numCols</a> = kf-&gt;MeasurementValidNum;</div>
<div class="line">    kf-&gt;z.<a class="code hl_variable" href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">numRows</a> = kf-&gt;MeasurementValidNum;</div>
<div class="line">}</div>
<div class="ttc" id="astructarm__matrix__instance__f32_html_a23f4e34d70a82c9cad7612add5640b7b"><div class="ttname"><a href="structarm__matrix__instance__f32.html#a23f4e34d70a82c9cad7612add5640b7b">arm_matrix_instance_f32::numRows</a></div><div class="ttdeci">uint16_t numRows</div><div class="ttdef"><b>Definition</b> arm_math.h:2400</div></div>
<div class="ttc" id="astructarm__matrix__instance__f32_html_acdd1fb73734df68b89565c54f1dd8ae2"><div class="ttname"><a href="structarm__matrix__instance__f32.html#acdd1fb73734df68b89565c54f1dd8ae2">arm_matrix_instance_f32::numCols</a></div><div class="ttdeci">uint16_t numCols</div><div class="ttdef"><b>Definition</b> arm_math.h:2401</div></div>
</div><!-- fragment --> </div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.14.0 </li>
  </ul>
</div>
</body>
</html>
